package cn.jsj.dao;

import java.util.List;
import java.util.ListIterator;

import org.hibernate.criterion.Restrictions;

import cn.jsj.object.LawyerAssiNames;
import cn.jsj.pojo.TblCashCheque;
import cn.jsj.pojo.TblLawyAssistant;
import cn.jsj.pojo.TblLawyer;
import cn.jsj.pojo.TblPracticeLawyer;

/**
 * 律师助理处理类
 * @author LI
 *
 */

public class TblLawyAssistantDAO {


	/**
	 * 验证登陆用户是否存在
	 * @param ui：登陆用户对象
	 * @return：用户对象：null：不存在
	 */
	public TblLawyAssistant userValidate(TblLawyAssistant ui){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List userList = session.createCriteria(TblLawyAssistant.class).add(
				Restrictions.eq("lawAssisName", ui.getLawAssisName()))
				.add(Restrictions.eq("lawyerPwd", ui.getLawyerPwd()))
				.add(Restrictions.eq("deleteLabel", 0))
				.list();
		// 提交事务
		tx.commit();
		session.close();
		//如果用户存在
		if(userList.size()!=0)
		{
			TblLawyAssistant user=(TblLawyAssistant)userList.get(0);
		return user;
		}
		else{
			return null;
		}
		}

	/**
	 * 根据律师助理姓名获取律师助理ID
	 * @param lawyerAssitName：律师助理姓名
	 * @return：律师助理ID 不存在：返回0
	 */
	public int getLawyerAssistId(String lawyerAssitName){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select lawAssisId from TblLawyAssistant where lawAssisName=?";
	    List result=session.createQuery(hql)
	    .setString(0, lawyerAssitName)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		//如果不存在
		if(result.size()==0){
			return 0;
		}
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		 Integer rows =(Integer)iterator.next();
		 return Integer.parseInt(rows.toString());
	}

	/**
	 * 根据律师助理ID获取律师助理姓名
	 * @param lawyerAssitId：律师助理ID
	 * @return：律师助理姓名
	 */
	public String getLawyerAssistName(int lawyerAssitId){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select lawAssisName from TblLawyAssistant where lawAssisId=?";
	    List result=session.createQuery(hql)
	    .setInteger(0, lawyerAssitId)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		 String rows =(String)iterator.next();
		 return rows;
	}

	/**
	 * 获得所有律师助理姓名
	 * @return：律师助理辅助对象列表
	 */
	public java.util.List<cn.jsj.object.LawyerAssiNames> getLawyerAssNames(){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblLawyAssistant.class)
		.add(Restrictions.eq("deleteLabel", 0))
		.list();
		// 提交事务
		tx.commit();
		session.close();

		//新建律师助理辅助对象队列
		java.util.List<LawyerAssiNames> lawAssList=new java.util.LinkedList<LawyerAssiNames>();

		//赋值
		for(int i=0;i<result.size();i++){
			//新建律师助理辅助对象
			LawyerAssiNames lan=new LawyerAssiNames();
			//获得律师助理对象
			cn.jsj.pojo.TblLawyAssistant tla=(TblLawyAssistant)result.get(i);
			//赋值
			lan.setLawyerAssiId(tla.getLawAssisId());
			lan.setLawyerAssiName(tla.getLawAssisName());
			//加入队列
			lawAssList.add(lan);
		}
		return lawAssList;
	}

	/**
	 * 律师助理领工资时，验证签名是否有效
	 * @param lawyerAssId：律师助理ID
	 * @param lawyerAssSign：律师助理签名：即密码
	 * @return：1：有效 0：无效
	 */
	public int signValidate(int lawyerAssId,String lawyerAssSign){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List userList = session.createCriteria(TblLawyAssistant.class).add(
				Restrictions.eq("lawAssisId", lawyerAssId))
				.add(Restrictions.eq("lawyerPwd", lawyerAssSign))
				.add(Restrictions.eq("deleteLabel", 0))
				.list();
		// 提交事务
		tx.commit();
		session.close();
		//是否存在该用户
		if(userList.size()!=0){
			return 1;
		}else{
			return 0;
		}
	}

	/**
	 * 保存律师助理信息
	 * @param tla：律师助理对象
	 * @return：1：保存成功
	 */
	public int saveLawyerAssist(cn.jsj.pojo.TblLawyAssistant tla){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		session.save(tla);
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}

	/**
	 * 获取律师助理信息条数
	 * @return:律师助理信息条数
	 */
	public int getLawyerAssistInfoNumb(){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="select count(*) from TblLawyAssistant where deleteLabel=0";
		List result=session.createQuery(hql).list();
		// 提交事务
		tx.commit();
		session.close();
		//获得结果的迭代器
		 ListIterator iterator = result.listIterator();
		 Long rows =(Long)iterator.next();
		 return Integer.parseInt(rows.toString());
	}

	/**
	 * 获取指定页面要显示的律师助理信息
	 * @param startNumb：从第几条开始
	 * @param totalNumb：这一页显示几条
	 * @return：这一页要显示的律师助理信息队列
	 */
	public java.util.List<TblLawyAssistant> getTheLawyerAssistInfo(int startNumb,int totalNumb){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblLawyAssistant.class)
		.add(Restrictions.eq("deleteLabel", 0))
		.setFirstResult(startNumb)
		.setMaxResults(totalNumb)
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result;
	}



	/**
	 * 搜索律师助理信息
	 * @param sap：律师助理参数类
	 * @return：律师助理信息队列
	 */
	public java.util.List<TblLawyAssistant> getSearchLaweryAssist(cn.jsj.bgtodb.SearchAssistProperty sap){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblLawyAssistant.class)
		.add(Restrictions.eq("lawAssisName", sap.getAssistName()))
		.add(Restrictions.eq("deleteLabel", 0))
		.setFirstResult(sap.getStartNumb())
		.setMaxResults(sap.getTotalNumb())
		.list();
		// 提交事务
		tx.commit();
		session.close();
		return result;

	}


	/**
	 * 更新律师助理信息
	 * @param tla：律师助理对象
	 * @return：1：更新成功
	 */
	public int updateLawyerAssist(cn.jsj.pojo.TblLawyAssistant tla){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		//获得时间字符串表示
		java.text.DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd");
		String dateString=df.format(tla.getBirthTime());
		String hql="update TblLawyAssistant m set m.birthTime=?,m.educationalLevel=?,m.graduateSchool=?,m.guidTeacher=?,m.identityNumber=?,m.lawAgreement=?,m.lawAssisEmail=?,m.lawAssisName=?,m.lawAssisPhone=?,m.lawAssisSex=?,m.politicalStatus=?,m.practiceNumber=?" +
				",m.startTime=?,m.endTime=?,m.frontOccupation=?,m.householeAddr=?,m.archiveAddr=?,m.eligibleNumb=?where m.lawAssisId=?";
		session.createQuery(hql).setString(0,dateString)
		.setString(1, tla.getEducationalLevel())
		.setString(2,tla.getGraduateSchool())
		.setInteger(3, tla.getGuidTeacher())
		.setString(4, tla.getIdentityNumber())
		.setInteger(5, tla.getLawAgreement())
		.setString(6, tla.getLawAssisEmail())
		.setString(7, tla.getLawAssisName())
		.setString(8, tla.getLawAssisPhone())
		.setString(9, tla.getLawAssisSex())
		.setString(10, tla.getPoliticalStatus())
		.setString(11, tla.getPracticeNumber())
		.setDate(12, tla.getStartTime())
		.setDate(13, tla.getEndTime())
		.setString(14, tla.getFrontOccupation())
		.setString(15, tla.getHouseholeAddr())
		.setString(16, tla.getArchiveAddr())
		.setString(17, tla.getEligibleNumb())
		.setInteger(18, tla.getLawAssisId())
		.executeUpdate();
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}


	/**
	 * 删除律师助理信息
	 * @param assistId：律师助理Id
	 * @return：1：删除成功
	 */
	public int deleteLawyerAssistInfo(int assistId){
		// 取得session对象
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		String hql="update TblLawyAssistant set deleteLabel=1 where lawAssisId=?";

	int updateResult=session.createQuery(hql)
		.setInteger(0, assistId)
		.executeUpdate();
		// 提交事务
		tx.commit();
		session.close();
		return updateResult;
	}


	/**
	 * 根据用户ID获得用户对象
	 * @param userId：用户ID
	 * @return：用户对象
	 */
	public TblLawyAssistant getlawyerAssInfo(int userId){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblLawyAssistant.class)
		.add(Restrictions.eq("lawAssisId", userId))
		.add(Restrictions.eq("deleteLabel", 0))
		.list();
		// 提交事务
		tx.commit();
		session.close();
		//如果结果队列不为null
		if(result.size()!=0){
			return (TblLawyAssistant)result.get(0);
		}
		return null;
	}

	/**
	 * 修改用户密码
	 * @param oldPwd：旧密码
	 * @param newPwd：新密码
	 * @param lawyerId：用户id
	 * @return：1:修改成功 0：修改失败
	 */
	public int modifyPassword(String oldPwd,String newPwd,int lawAssistId){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		List result=session.createCriteria(TblLawyAssistant.class)
		.add(Restrictions.eq("lawAssisId", lawAssistId))
		.list();

		TblLawyAssistant lawyerAssist=(TblLawyAssistant)result.get(0);
		//得到用户密码
		String password=lawyerAssist.getLawyerPwd();
		//判断输入的旧密码是否正确
		if(password.equalsIgnoreCase(oldPwd))
		{
			//修改用户密码
			String hql="update TblLawyAssistant m set m.lawyerPwd=?where m.lawAssisId=?";
			session.createQuery(hql)
			.setString(0, newPwd)
			.setInteger(1, lawAssistId)
			.executeUpdate();
			// 提交事务
			tx.commit();
			session.close();
			return 1;
		}
		else{
			// 提交事务
			tx.commit();
			session.close();
			return 0;
		}
	}



	/**
	 * 修改用户的联系方式
	 * @param contactWay：新的联系方式
	 * @param lawyerId：用户id
	 * @return：1 修改成功
	 */
	public int modifyContactWay(String contactWay,int lawyerAssId){
		org.hibernate.Session session = HBUtils.getSession();
		// 新建事务对象
		org.hibernate.Transaction tx = session.beginTransaction();
		// 开始事务
		tx.begin();
		//修改用户密码
		String hql="update TblLawyAssistant m set m.lawAssisPhone=?where m.lawAssisId=?";
		session.createQuery(hql)
		.setString(0, contactWay)
		.setInteger(1, lawyerAssId)
		.executeUpdate();
		// 提交事务
		tx.commit();
		session.close();
		return 1;
	}
}